const jwt = require('jsonwebtoken');

// 验证Token中间件
// 用于验证请求中的JWT token，并获取用户信息
const verifyToken = async (req, res, next) => {
  try {
    // 从请求头中获取token
    // Authorization: Bearer <token>
    const token = req.headers.authorization?.split(' ')[1];
    if (!token) {
      return res.status(401).json({ error: '未提供认证令牌' });
    }

    // 验证JWT token的有效性
    // 使用环境变量中的JWT_SECRET进行验证
    const decoded = jwt.verify(token, process.env.JWT_SECRET);
    req.user = decoded;

    // 从数据库获取用户信息，验证剩余查询次数
    // 使用token中的userId查询用户详细信息
    const [user] = await req.db.execute(
      'SELECT * FROM user_info WHERE id = ?',
      [decoded.userId]
    );

    // 验证用户是否存在
    if (!user || user.length === 0) {
      return res.status(401).json({ error: '用户不存在' });
    }

    // 将用户信息添加到请求对象中
    // 供后续路由处理函数使用
    req.userInfo = user[0];
    next();
  } catch (error) {
    // 处理JWT验证错误
    if (error.name === 'JsonWebTokenError') {
      return res.status(401).json({ error: '无效的认证令牌' });
    }
    next(error);
  }
};

module.exports = { verifyToken };